package comunicacao.servidor;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.rmi.AlreadyBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.server.UnicastRemoteObject;

import comunicacao.faces.IFServidor;



public class Servidor implements IFServidor {

	private static String dir = "C:" + File.separator+ "ArquivosCompartilhados";

	public Servidor() {
		inicia();
	}

	public void inicia() {
		try {
			File diretorio = new File(dir);
			diretorio.mkdir();
			// Exporta o objeto remoto
			IFServidor stub = (IFServidor) UnicastRemoteObject.exportObject(this, 0);

			// Liga o stub do objeto remoto no registro, e inicia o RMIRegistry
			// na porta 1000
			Registry registry = LocateRegistry.createRegistry(1000);

			// Dá um nome pra ele no registro
			registry.bind("Servidor", stub);

			System.out.println("Servidor iniciado...");
		} catch (RemoteException Re) {
			System.out.println(Re.getMessage());
		} catch (AlreadyBoundException ABe) {
			System.out.println(ABe.getMessage());
		} catch (Throwable t) {
			t.printStackTrace();
		}
	}

	public File[] listarArquivos() {
		File diretorio = new File(dir);
		if(diretorio.listFiles().length > 0) {
			return diretorio.listFiles();
		}else{
			return null;
		}
	}

	public byte[] getDownload(String arquivo) {
		try {
			// Carrega o arquivo
			FileInputStream in = new FileInputStream(dir + File.separator + arquivo);
			// Carrega dados e informações do arquivo
			FileChannel fc = in.getChannel();
			// inicia array de bytes de tamanho igual ao do arquivo a enviar
			byte[] data = new byte[(int) fc.size()];
			ByteBuffer bb = ByteBuffer.wrap(data);
			// insere conteudo do arquivo no vetor de bytes
			fc.read(bb);
			System.out.println("Quantidade de bytes: " + data.length);
			return data;
		} catch (FileNotFoundException e) {
			return null;
		} catch (IOException e) {
			return null;
		}
	}

	public static void main(String args[]) {
		new Servidor();
	}
}
